#include "compas.h"
#include "asistentexml.h"

Compas::Compas()
{
    d = new d_Compas;
}

Compas::Compas(const Compas& compas) : d(compas.d)
{
}

Compas::~Compas()
{

}

void Compas::setListaNotas(const QList<NotaCompas>& listaNotas)
{ 
    d->listaNotas = listaNotas;
    qSort(d->listaNotas); 
}

QVariant Compas::get(const QString& nombreAtributo) const
{
	GET_ATR(getNombre())
	GET_ATR(getNumeroPulsos())
    GET_DEF
}

int Compas::getAncho(const QString& nombreAtributo) const
{
    ANCHO_ATR(getNombre(), 200)
    ANCHO_ATR(getNumeroPulsos(), 50)
    ANCHO_DEF
}

void Compas::serializar(QDomElement& elementoCompas) const
{
    AsistenteXml asistente(elementoCompas.ownerDocument());

    asistente.escribirAtributo(elementoCompas, "nombre", getNombre());
    asistente.escribirAtributo(elementoCompas, "numero-pulsos", QString::number(getNumeroPulsos()));

    foreach (NotaCompas notaCompas, getListaNotas()) {
        QDomElement elementoNota = asistente.escribirElemento(elementoCompas, "nota");
        notaCompas.serializar(elementoNota);
    }
}

void Compas::deserializar(const QDomElement& elementoCompas)
{
    AsistenteXml asistente(elementoCompas.ownerDocument());

    setNombre(asistente.leerAtributo(elementoCompas, "nombre"));
    setNumeroPulsos(asistente.leerAtributo(elementoCompas, "numero-pulsos").toInt());

    d->listaNotas.clear();
    QList<QDomElement> listaElementosNota = asistente.leerElementos(elementoCompas, "nota");
    foreach (QDomElement elementoNota, listaElementosNota) {
        NotaCompas notaCompas;
        notaCompas.deserializar(elementoNota);
        d->listaNotas.append(notaCompas);
    }
    qSort(d->listaNotas); 

    //foreach (NotaCompas notaCompas, listaNotas) {
    //    qDebug() << notaCompas.toString();
    //}
}